import os
import time
import uuid

import yaml
import rsa
import pymysql
from jsonpath import jsonpath
from config.config import config
from utils.mysql_util import PyMySql
import hashlib
from typing import Union
import csv
from config.constants import *
from faker import Faker

# def db_query_all(sql, params=None):
#     """改进的数据库查询"""
#     db = PyMySql()
#     try:
#         value = db.executeall(sql, params) if params else db.executeall(sql)
#         return value[0][0] if value else None
#     finally:
#         db.close()


def db_query_all(sql, params=None):
    db = PyMySql()
    try:
        value = db.executeall(sql, params) if params else db.executeall(sql)
        result = value[0][0] if value else None
        print(f"[DEBUG] db_query_all executed: {sql} -> {result}")  # 调试输出
        return result
    finally:
        db.close()


def gen_random_name():
    fake = Faker()
    return fake.city()  # 或者使用 fake.street_name(), fake.word() 等


def gen_random_sort():
    fake = Faker()
    return str(fake.random_int(min=1, max=100))  # 生成1-100之间的随机整数

# debugtalk.py


def clean_token(raw_token):
    """去除 token 中的非法字符（如开头的 '/' 和换行符）"""
    return raw_token.lstrip("/").replace("\n", "").strip()


def int_str(int_data):
    return str(int_data)


# def clean_token(raw_token):
#     """去除 token 中的换行符和空格"""
#     return raw_token.replace("\n", "").replace(" ", "").strip('"')

def get_db_query(key_value):
    """数据库查询"""
    sql = "SELECT user_state FROM y_user WHERE username = %s"  # 使用占位符
    db = PyMySql()
    value = db.executeall(sql, (key_value,))  # 传入参数作为元组
    db.close()

    if not value:
        print(f"警告: 用户 {key_value} 在数据库中不存在")
        return None

    return value[0][0]


def read_config():
    """获取全局环境配置"""
    # config.API_BASE_URL
    # "http://10.59.9.21/"
    return config.API_BASE_URL

# csv读取 - 改进版本


def read_csv(filepath):
    """
    读取CSV文件并返回参数化数据
    Args:
        filepath: CSV文件路径（相对于data目录）
    Returns:
        list: 参数化数据列表
    """
    path = os.path.join(DATA_PATH, filepath)
    try:
        with open(path, 'r', encoding='utf-8') as f:
            reader = csv.DictReader(f)
            data_list = []
            for row in reader:
                # 转换为列表格式，保持与HttpRunner兼容
                data_list.append(list(row.values()))
            return data_list
    except FileNotFoundError:
        print(f"警告：CSV文件 {filepath} 不存在")
        return []
    except Exception as e:
        print(f"读取CSV文件 {filepath} 时出错：{e}")
        return []

# 需禁用 Google Analytics 进行匿名统计


def disable_ga():
    return True


def md5(s: Union[str, bytes, int, float]) -> str:
    """
    生成输入数据的 MD5 哈希值（16进制字符串格式）。
    参数:
        s: 输入数据，支持字符串(str)、字节(bytes)、整数(int)、浮点数(float)或可转为字符串的类型。
    返回:
        str: 16进制格式的MD5哈希值。
    异常:
        TypeError: 当输入无法转换为字节时抛出。
    """
    try:
        # 如果输入不是字符串或字节，先转为字符串（兼容数字等类型）
        if not isinstance(s, (str, bytes)):
            s = str(s)

        # 如果是字符串，显式编码为UTF-8字节（避免系统编码不一致问题）
        if isinstance(s, str):
            s = s.encode('utf-8')

        # 计算MD5并返回16进制结果
        return hashlib.md5(s).hexdigest()
    except (AttributeError, UnicodeError) as e:
        # 捕获编码错误或非法输入，转换为TypeError并保留原始异常信息
        raise TypeError(f"输入无法转换为字节: {e}") from e

# ${read_config()}


def read_yaml(key):
    """读取提取的变量"""
    with open(os.getcwd() + "/extract.yaml", encoding="utf-8") as f:
        value = yaml.safe_load(f)
    return value.get(key, "")


def get_timestamp(length=10):
    """获取时间戳"""
    return str(int(time.time()))[:length]
